home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / docs / asm_guide / assembler course / simple_window.s < prev   
Text File  |  1992-04-27  |  4KB  |  131 lines

  1.  
  2.  
  3.     ; the next part will open a window on the screen, print text in it,
  4.     ; wait a few seconds, and close it again. 
  5.  
  6.     ; NOTE **** the window will be on the WORKBENCH-screen so it is NOT
  7.     ; visible in the ASMONE-screen. Switch to the workbench screen if you
  8.     ; wanna look at it.
  9.  
  10.     ; How this program works: A window on the Amiga can be threated 
  11.     ; just as a FILE: you use the same routines
  12.     ; to open a file on disk (df0:) as to open a window (con: or raw:)
  13.     ; A filename on disks is something like df0:s/startup-sequence.
  14.     ; The 'filename' for a window is: "CON:x1/y1/x2/y2/name" where you
  15.     ; must fill in x1..y2 with the start- and end-coordinates of the
  16.     ; window. for example if you open a file called 
  17.     ; "CON:0/0/640/256/testwindow", a window with titlebar "testwindow"
  18.     ; will appear with maximum size.
  19.     ; You can use this way of opening a window ANYwhere, so also in
  20.     ; CLI-commands. Try for example:
  21.  
  22.     ; COPY df0:s/startup-sequence CON:0/0/640/256/MyWindow
  23.  
  24.     ; this will copy the contents of the st.seq. not to a usual file but
  25.     ; to a window !
  26.  
  27.  
  28.     ; ANYWAY... HERE IT IS....
  29.  
  30.  
  31. START:    movem.l    d0-a6,-(a7)            ; save all registers on stack
  32.  
  33.  
  34.     ; because we use commands in the DOSlibrary, we must find out where
  35.     ; this lib is, we use the 'openlib' command.
  36.  
  37. OPENDOSLIB:
  38.  
  39.     move.l    $4,a6                ; 'openlib' is an EXEC routine
  40.                         ; so load the startaddress of
  41.                         ; the execlib.
  42.     move.l    #doslibname,a1            ; a1 must contain the address
  43.                         ; where we typed the library's
  44.                         ; name.
  45.     jsr    -408(a6)            ; now call the 'openlib' routy
  46.     move.l    d0,dosbase            ; The result is the base of
  47.                         ; the specified library, or
  48.     beq.s    error                ; zero if it wasn't found.
  49.  
  50.     ; at this point, we are ready to use the doslib-commands. Opening
  51.     ; a window now is nothing more than opening a file with the special
  52.     ; name 'CON:.....' (see top of source) Then you can 'WRITE' anything
  53.     ; to this window just like you would write it to a file, 
  54.  
  55.     ; So you should now see that you could use the next routine to put
  56.     ; some text in  ANY file, so also one on disk or printer. Just 
  57.     ; change the filename to DF0:BLABLA or PRT: or anything you like.
  58.  
  59. OPEN:    ; the dos-'OPEN' command is used to open a file. It needs 2 
  60.     ; parameters: d1 and d2
  61.  
  62.     move.l    #filename,d1            ; address where the filename
  63.                         ; is situated must be loaded
  64.                         ; into d1
  65.     move.l    #1006,d2            ; d2 must contain the 'mode'
  66.                         ; 1006 means 'open_old':
  67.                         ; open an existing file for
  68.                         ; reading.
  69.                         ; 1005 means 'open_new':
  70.                         ; open a new fiel for output
  71.     move.l    dosbase,a6            ; Load the base of the doslib
  72.     jsr    -30(a6)                ; Call routine at -30 in the
  73.                         ; doslib. This is 'OPEN'
  74.  
  75.     move.l    d0,filehandle            ; the result is the 'handle'
  76.                         ; to this file. if it's zero,
  77.                         ; some error ocurred, in that
  78.     beq.w    error                ; case goto the errorroutine
  79.  
  80.  
  81. WRITE:    ; the dos-'write' command needs 3 parameters: d1, d2 and d3...
  82.  
  83.     move.l    filehandle,d1            ; d1 must contain the handle
  84.                         ; of our file.
  85.     move.l    #text,d2            ; d2 must contain the address
  86.                         ; where our data (text) is
  87.                         ; located.
  88.     move.l    #endoftext-text,d3        ; d3 must contain the size of
  89.                         ; the datablock, which is the
  90.                         ; end-address minus the start-
  91.                         ; address.
  92.     move.l    dosbase,a6
  93.     jsr    -48(a6)                ; call the 'Write' command
  94.     
  95.  
  96. DELAY:    ; this command needs 1 parameter: d1
  97.  
  98.     move.l    #100,d1                ; d1 is the time to delay.
  99.                         ; time in seconds = value/50
  100.                         ; for example move.l #100,d1
  101.                         ; is same as wait 2 seconds.
  102.     move.l    dosbase,a6
  103.     jsr    -198(a6)            ; call the 'delay' command.
  104.  
  105. CLOSE:    ; now close the file, opened with the OPEN command. This will in this
  106.     ; case close the window.
  107.  
  108.     move.l    filehandle,d1            ; d1 must contain the file-
  109.                         ; handle.
  110.     move.l    dosbase,a6
  111.     jsr    -36(a6)                ; call the 'close' command.
  112.  
  113.  
  114. error:    movem.l    (a7)+,d0-a6            ; restore all registers
  115.     rts                    ; end of program
  116.  
  117. ***************************
  118.  
  119. ;; Here starts the DATA part. Make sure it is situated BEHIND the code-part
  120.  
  121.  
  122. doslibname:    dc.b    "dos.library",0
  123. filename:    dc.b    "RAW:0/0/200/100/test",0
  124. text:        dc.b    "Yeah, this is just a simple TEST",10,0
  125. endoftext:
  126.         even        ; force the next data to even boundary
  127.  
  128. dosbase:    dc.l    0
  129. filehandle:    dc.l    0
  130.  
  131.